package com.zk.atm.utils;

import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.Map.Entry;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import com.bpms.common.VO;
import com.bpms.common.VOList;

public class ExcelExportUtil {

	public static void main(String[] args) {
		VO vo=new VO();
		vo.setAttr("name", "11");
		vo.setAttr("age", "12");
		vo.setAttr("sex", "13");
		Hashtable<String,String> ht=vo.attrs();
		Iterator<Map.Entry<String,String>> it=ht.entrySet().iterator();
		while(it.hasNext()){
			Entry e=it.next();
			System.out.println(e.getKey());
			System.out.println(e.getValue());
		}
		
	}
	
	public static HSSFWorkbook getExcelBook(VO vo) throws Exception {
		// 第一步，创建一个webbook，对应一个Excel文件
		HSSFWorkbook wb = new HSSFWorkbook();
		// 第二步，在webbook中添加一个sheet,对应Excel文件中的sheet
		HSSFSheet sheet = wb.createSheet("设备交易记录表");
		// 第三步，在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
		HSSFRow row = sheet.createRow((int) 0);
		// 第四步，创建单元格，并设置值表头 设置表头居中
		HSSFCellStyle style = wb.createCellStyle();
		style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
        Map header_map=new TreeMap();
        header_map=(Map) vo.getObj("header_map");
        if(header_map.size()==0){
        	return null;
        }
        //写表头
        Iterator<Entry<String,String>> map_it=header_map.entrySet().iterator();
        List<String> list=new ArrayList<String>();
        int cell_index=0;
		while(map_it.hasNext()){
			Entry<String,String> e=map_it.next();
			String key=e.getKey();
			String header_value=e.getValue();
			HSSFCell cell=row.createCell((short)cell_index);
			cell.setCellValue(header_value);
			cell.setCellStyle(style);
			
			list.add(key);
			cell_index++;
		}

		VOList volist=(VOList) vo.getObj(ConstantsAtmp.ATMP_GATEWAYSERVLET_CONVERT_BPMVO_TO_JSON_VOLIST);
		if(volist==null||volist.listData.size()==0){
			return null;
		}
		// 第五步，写入实体数据 实际应用中这些数据从数据库得到，
		Iterator<VO> it=volist.listData.iterator();
		int i=0;
		while(it.hasNext()){
			VO trade_vo=it.next();
			//外循环,创建行
			row = sheet.createRow((int) i + 1);
			//Iterator<Entry<String,String>> map_it=header_map.entrySet().iterator();
			//内循环,创建列
			int cell_num=0;
			for(int k=0;k<list.size();k++){
				String column_key=list.get(k).toString().toLowerCase();
				String column_value=StringUtil.getPropertyValue(trade_vo.getAttr(column_key));
				
				if(column_key.equals("results")){
					column_value=StringUtil.getPropertyValue(ConstantsAtmp.MAP_RESULTS.get(column_value));
				}else if(column_key.equals("iscleanmachine")){
					column_value=StringUtil.getPropertyValue(ConstantsAtmp.MAP_IS_CLEAN_MACHINE.get(column_value));
				}else if(column_key.equals("status")){
					column_value=StringUtil.getPropertyValue(ConstantsAtmp.MAP_AUDIT_STATUS.get(column_value));
				}
				row.createCell((short)cell_num).setCellValue(column_value);
				cell_num++;//列加加
			}
			i++;//行加加
		}
//		String file_url=StringUtil.getPropertyValue(vo.getAttr("file_url"));
//		if(file_url.equals("")){
//			return null;
//		}
//		File file_excel=new File(file_url);
//		if(!file_excel.exists()){
//			FileUtil.createFile(file_url);
//		}
//      FileOutputStream out=new FileOutputStream(file_excel);
//      wb.write(out);
		return wb;
	}
	
	

}
